<?php

/**
 * Diese Klasse verwaltet alle Zugriffsrechte
 * 
 * @author mills
 *
 */
class AccessrightDAO extends AbstractDAO {
	
	/**
	 * Der Konstruktor stattet die DAO mit einem DB Objekt aus
	 * und erzeugt die Tabelle 'Accessright' wen diese in der Datenbank nicht existiert
	 */
	function __construct() {
		
		// den Konstruktor von AbstractDAO aufrufen
		parent::__construct('Accessright');
		
		{	// Wenn es die Tabelle nicht gibt, dann soll diese erzeugt werden
			$sql = 'CREATE TABLE IF NOT EXISTS '.Accessright::$tablename.' (
						ID INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
						URL VARCHAR(255) NOT NULL,
   						RightID INT UNSIGNED NOT NULL
   					)';

			$db = DBFactory::getInstance();
			
			// Query vorbereiten
			if (!$stmt = $db->prepare($sql)) {
				// error
				$this->logger->logFile('Database error creating table '.Accessright::$tablename.': '. $this->db->error, LEVEL_ERROR);
				
				return null;
			}

			// Statement ausführen
			if (!$stmt->execute()) {
				// error
				$this->logger->logFile('Statement error creating table '.Accessright::$tablename.': '. $stmt->error, LEVEL_ERROR);
				
				return null;
			}

			// Statement beenden
			$stmt->close();
			
			// DB Instanz freigeben
			unset($db);
		}
	}
	
	/**
	 * Der Destruktor entfernt die Referenz auf das DB Objekt
	 */
	function __destruct() {
		parent::__destruct();
	}
	
	/**
	 * Lädt alle Entitäten von Accessright mit der übergebenen RightID
	 * 
	 * @param integer $rightid
	 */
	public function getByRightId($rightid) {
		// Wenn vorher ein Fehler aufgetreten ist, schlucken
		$this->handle_previous_error();
		
		// debug
		$this->logger->logFile("Loading all entties of Accessright for Right id '".$rightid."'", LEVEL_DEBUG);
		
		// Lade alle Accesrights wo RightID = $rightid ist
		$entities = $this->em->getRepository('Accessright')->findBy(array('RightID' => $rightid));
		
		//debug
		$this->logger->logFile("Loaded ".count($entities)." entities of Accessright", LEVEL_DEBUG);
		
		return $entities;
	}
	
	/**
	 * Lädt alle Entitäten von Accessright mit der übergebenen URL
	 * 
	 * @param string $url
	 */
	public function getByUrl($url) {
		// Wenn vorher ein Fehler aufgetreten ist, schlucken
		$this->handle_previous_error();
		
		// debug
		$this->logger->logFile("Loading all entties of Accessright for url '".$url."'", LEVEL_DEBUG);
		
		// Lade alle Accesrights wo URL = $url ist
		$entities = $this->em->getRepository('Accessright')-findBy(array('URL' => $url));
		
		//debug
		$this->logger->logFile("Loaded ".count($entities)." entities of Accessright", LEVEL_DEBUG);
		
		return $entities;
	}

	public function exists($accessright) {
		// Wenn vorher ein Fehler aufgetreten ist, schlucken
		$this->handle_previous_error();
		
		// debug
		$this->logger->logFile("Checking Accessright...", LEVEL_DEBUG);
		
		// Lade das bestimmte zugriffsrecht aus der DB
		$entity = $this->em->getRepository('Accessright')->findBy(array('URL' => $accessright->get_url(), 'RightID' => $accessright->get_rightid()));
		
		// debug
		$this->logger->logFile($entity ? "Access granted." : "Access denied.", LEVEL_DEBUG);
		
		return $entity ? true : false;
	}
	
	public function pre_delete($entity) {
		
	}
}

?>